package com.nbcio.cd.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.nbcio.cd.domain.CdShare;
import com.nbcio.cd.domain.vo.CdShareVo;

import jakarta.servlet.http.HttpServletResponse;
import com.nbcio.cd.domain.vo.CdFileVo;
import java.util.Date;
import java.util.List;

/**
 * 云网盘分享Service接口
 *
 * @author nbacheng
 */
public interface ICdShareService extends IService<CdShare> {

    /**
     * 创建分享
     *
     * @param shareType 分享类型
     * @param resourceId 资源ID
     * @param shareName 分享名称
     * @param sharePassword 分享密码
     * @param expireTime 过期时间
     * @param accessLevel 访问级别
     * @param allowDownload 允许下载
     * @param allowPreview 允许预览
     * @return 分享信息
     */
    CdShareVo createShare(String shareType, Long resourceId, String shareName, String sharePassword,
                         Date expireTime, String accessLevel, Boolean allowDownload, Boolean allowPreview);

    /**
     * 获取分享信息
     *
     * @param shareCode 分享码
     * @return 分享信息
     */
    CdShareVo getShareInfo(String shareCode);

    /**
     * 验证分享密码
     *
     * @param shareCode 分享码
     * @param password 密码
     * @return 验证结果
     */
    Boolean validateSharePassword(String shareCode, String password);

    /**
     * 更新分享设置
     *
     * @param shareId 分享ID
     * @param shareName 分享名称
     * @param sharePassword 分享密码
     * @param expireTime 过期时间
     * @param accessLevel 访问级别
     * @param allowDownload 允许下载
     * @param allowPreview 允许预览
     * @return 操作结果
     */
    Boolean updateShareSettings(Long shareId, String shareName, String sharePassword,
                               Date expireTime, String accessLevel, Boolean allowDownload, Boolean allowPreview);

    /**
     * 删除分享
     *
     * @param shareId 分享ID
     * @return 操作结果
     */
    Boolean deleteShare(Long shareId);

    /**
     * 获取用户分享列表
     *
     * @param userId 用户ID
     * @return 分享列表
     */
    List<CdShareVo> getUserShares(Long userId);

    /**
     * 清理过期分享
     */
    void cleanExpiredShares();

    /**
     * 通过分享码下载文件
     *
     * @param shareCode 分享码
     * @param response HTTP响应
     */
    void downloadFileByShare(String shareCode, HttpServletResponse response);

    /**
     * 通过分享码预览文件
     *
     * @param shareCode 分享码
     * @param response HTTP响应
     */
    void previewFileByShare(String shareCode, HttpServletResponse response);

    /**
     * 通过分享码获取文件信息
     *
     * @param shareCode 分享码
     * @return 文件信息
     */
    CdFileVo getFileInfoByShare(String shareCode);
}
